Cache memories are employed in shared memory, multiprocessor data processing systems in order to improve performance. The time required to access data in the shared memory can be reduced by storing local copies of data in the cache memories. As the memory is shared amongst multiple processors, cache coherency schemes are necessary to ensure that each processor views and has access to the most recent shared data in the cache memories.
In a snoop-based cache coherency protocol, cache control circuitry at each processor monitors the memory bus for addresses cached in the local cache memory. When a cache control circuit detects a write to an address by another processor and that address is locally cached, the cache control circuit can mark the local copy as invalid. When a processor seeks access to an address that is cached and marked invalid, the cache control circuit fetches the up-to-date data.
Snoop requests can reduce system performance. Each cache control circuit broadcasts indications of cache line updates to all the other cache control circuits. In a system having N processors, the snoop traffic will be proportional to N*(N−1). As a large number of cache lines may not be shared amongst the processors, much of the snoop traffic can be wasteful. The excess snoop traffic reduces the bandwidth available for accesses to the shared memory.
Cache control circuits can be implemented with snoop filters to reduce unnecessary snoop traffic. Generally, a snoop filter tracks which addresses are cached and filters requests that do not reference cached addresses. Furthermore, a snoop filter may also track which processors, or the number of processors that have requested copies of cacheable addresses and filter snoops not only to addresses that are cached, but also filter snoops to only the processors that have those tracked addresses cached. Cache filters are generally of two types: precise cache filters and imprecise cache filters. A precise snoop filter filters snoop requests by addresses of individual cache lines. An imprecise snoop filter filters snoop requests by addresses of groups of cache lines.